今天來把數學運算相關的東西寫一寫
首先JavaScript的數字是以浮點數表示(詳細可以看wiki)
簡單說明的話,浮點數因為原理的關係,沒有辦法顯示或運算很精確的數值
可以看以下範例
let numA = 0.1;
let numB = 0.2;
let numC = 3.1415;
let numD = 3.000000000000000000123456;
console.log(numA + numB === 0.3); //false 不該是true嗎?
console.log(numC); // 3.1415
console.log(numD); // 3 小數點去哪了?
所以在用JS做運算時要小心,尤其是拿小數作比較的情況。
JS能的數值是有限的,內建的Number.MAX_VALUE
值表示JS能保存的最大數值
如果超過最大值會被轉為特殊的值Infinity
(無限大),另外也有負的-Infinity
(負無限大)
let max = Number.MAX_VALUE;
console.log(max); // 1.7976931348623157e+308
console.log(max * 2);//Infinity
console.log(-max * 2);//-Infinity
console.log(1 / 0);//Infinity 拿數字除0的結果也是無限大
NaN
(Not a Number)是一個特殊值,雖然字面上意思是"不是一個數字",
但用typeof
去檢驗型別,NaN
就是數字
console.log(typeof NaN); //number
個人解釋NaN是"不能用數值表示的數字"
當數學運算結果不能以數值表示時,結果就會是NaN
,像昨天拿兩個字串相減的結果
let num = 200;
let strA = '我不是個數字~~';
let strB = '我也不是數字';
console.log(num - strA); //NaN
console.log(strB - strA); //NaN
Math
是JS內建的物件,內建有許多方法來幫助我們做數學運算
如果還不知道什麼是物件跟方法,先當作是JS內建的功能來使用。
這邊介紹幾個最常用到的方法
Math.abs(值)
:回傳絕對值Math.ceil(值)
:回傳比值大中,最接近的整數Math.floor(值)
:回傳比值大中,最接近的整數Math.round(值)
:回傳四捨五入的數
嗯?Math.ceil()
跟Math.floor()
不是單純的無條件進位跟無條件捨去嗎?
在值是正數的情況下是,但在值的負數的情況下結果會反過來,在做數學運算需要注意
let numA = 3.14;
let numB = 3.5;
let numC = -3.14;
console.log(Math.ceil(numA)); //4
console.log(Math.floor(numA)); //3
console.log(Math.round(numA)); //3
console.log(Math.round(numB)); //4
console.log(Math.abs(numC)); //3.14
console.log(Math.ceil(numC)); //-3
console.log(Math.floor(numC)); //-4
console.log(Math.round(numC)); //-3
另外還有計算對數、三角函數等運算的方法能用,詳情請洽MDN
Math.random()
這個方法可以回傳從0~1間(不包含0跟1)的隨機小數,
利用這個方法可以來取各種隨機值。
舉個簡單的例子,現在我們想要做一個隨機骰出1~6點數的骰子
Math.random()
取一個小數 (0~1間數字)以下是實作範例
let num = Math.random(); //假設隨機數是0.25
console.log(num); //0.25
num *= 6;
console.log(num); //1.5
num = Math.floor(num);
console.log(num); //1
num++;
console.log(num); //2
console.log(Math.floor(Math.random() * 6) + 1); //全部寫在一起的做法
今天就到這邊,明天是字串相關介紹~